package com.xyz;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        //构建地图
        Map maps[][] = initMap();
        //初始化怪物
        initMonsters(maps);

        //使用类定义
        //定义玩家对象
        Player p1 = initPlayer(maps);

        //玩家进入地图，找怪、打怪
        cmd_ui(p1,maps);
    }

    // 用户交互逻辑，除了初始化之外的游戏主进程控制，都放在下面方法中
    public static void cmd_ui(Player p,Map[][] maps){
        //定义一个循环，不停的询问用户下一步要干嘛
        do{
            System.out.println("老大，接下来要干啥？");
            System.out.println("请输入下面命令中任意一项：");
            System.out.println("命令：travel   功能：在地图上旅行");
            System.out.println("命令：look   功能：看景色");
            System.out.println("命令：fm   功能：find monster 找怪物");
            System.out.println("命令：km   功能：kill monster 打怪物");
            System.out.println("命令：quit   功能：退出游戏");
            //获取用户输入的命令
            Scanner sc = new Scanner(System.in);
            String next_move= sc.next();
            //进入分支，根据命令来进行相应的操作
            switch (next_move){
                case "travel":
                    p.do_travel(maps);
                    break;
                case "look":
                    p.look(maps);
                    break;
                case "fm":
                    p.findMonster(maps);
                    break;
                case "km":
                    //获取玩家所在的地图
                    Map m = maps[p.getX()][p.getY()];
                    p.km(m);
                    if(p.getHp()<=0){
                        System.out.println("Game Over!");
                        return;
                    }
                    break;
                case "quit":
                    //退出游戏分支
                    System.out.println("Game Over!");
                    //用return 退出当前方法
                    return;
                default:
                    System.out.println("老大，你不认识字吗？敢敲个正确的命令不？");
            }

        }while (true);

    }

    //初始化地图的方法
    public static Map[][] initMap(){

        System.out.println("初始化地图开始........");

        Map m1 = new Map("天竺","只见天上万道佛光，飞天仙女吹奏着无上仙音，各种瑞兽灵怪四处游走",0,0);
        Map m2 = new Map("北冥冰国","放眼处万里冰封，寒风呼啸，鹅毛大雪随风飞舞",1,0);
        Map m3 = new Map("花果山","苍天巨树林立，奇花异果密布，到处都有猴子窜来窜去",2,0);
        Map m4 = new Map("火焰山","满目赤红的世界，空气都在热力下扭曲，远处大山上还冒起冲天大火",0,1);
        Map m5 = new Map("东土大唐","街道宽敞整洁，店铺鳞次栉比，车马如龙，行人似海",1,1);
        Map m6 = new Map("龙宫","整个如水晶世界，各种游鱼水怪传游不息，远处一个金碧辉煌的宫殿，上写两个大字：水晶宫！",2,1);
        Map m7 = new Map("盘丝洞","黑色洞口阴风不断，深不见底，四处布满蛛丝，还有无数小蛛爬来爬去",0,2);
        Map m8 = new Map("阎罗殿","绿色鬼火忽明忽暗，无数鬼差阴使肃立两边，正当中坐一青面獠牙身穿朱红官服鬼王，上有匾额：阎罗殿",1,2);
        Map m9 = new Map("蓬莱","岛上密布紫竹，上有仙鸟悠然盘旋，仙音不断，观音大士端坐在一金色莲花当中，宝相庄严",2,2);

        Map maps[][] = new Map[3][3];

        maps[0][0] = m1;
        maps[1][0] = m2;
        maps[2][0] = m3;
        maps[0][1] = m4;
        maps[1][1] = m5;
        maps[2][1] = m6;
        maps[0][2] = m7;
        maps[1][2] = m8;
        maps[2][2] = m9;

        System.out.println("初始化地图结束........");
        return maps;
    }

    //初始化玩家
    public static Player initPlayer(Map[][] maps)
    {
        System.out.println("初始化玩家开始........");
        Player p1 = new Player("李逍遥",1000,5,15,0,0);
        //先定义技能
        Skill s1 = new Skill("万剑齐飞","只见天地变色，风起云涌，无数把飞剑从天而降，直冲对方飞刺过去！",100,"m");
        //将技能赋给角色
        p1.setSkill(s1);
        System.out.println(p1.getName()+"获取["+s1.getName()+"] 技能成功！");
        //显示技能
        p1.getSkill().print();
        System.out.println("初始化玩家结束........");
        return p1;
    }
    //初始化怪物
    public static void initMonsters(Map[][] maps){
        System.out.println("初始化所有怪物开始........");
        Monster m1 = new Monster("树妖",500,8,10);
        //因为对象是引用类型，所以要多个同种怪物，必须进行拷贝，而非直接用 = 赋值，
        // 否则传递的是地址，操作的都是同一个对象
        Monster m2= m1.copy();
        Monster m3 = new Monster("花精",100,5,15);
        Monster m4 = m3.copy();
        Monster m5 = m3.copy();
        //都塞入花果山地图
        maps[2][0].addMoster(m1);
        maps[2][0].addMoster(m2);
        maps[2][0].addMoster(m3);
        maps[2][0].addMoster(m4);
        maps[2][0].addMoster(m5);
        System.out.println("初始化所有怪物结束........");
    }
}
